package com.admin.domain.service;

import com.admin.domain.model.Menu;
import com.admin.domain.model.Resource;
import com.admin.domain.model.SelectMenu;
import com.admin.domain.model.SelectResource;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.List;
import java.util.stream.Collectors;


/**
 * 资源选择
 *
 * @author Jonsy
 */
@Service
public class ResourceSelectService {

    /***
     * 角色具备的 _资源_ 与 _所有资源_ 进行合并，合并结果是所有的资源中 角色具备的资源checked=true
     *
     * @param all
     * @param part
     * @return
     */
    public List<SelectResource> mergeResource(List<Resource> all, List<Resource> part){
        if(CollectionUtils.isEmpty(all)){
            return null;
        }

        if(CollectionUtils.isEmpty(part)){
            return all.stream().map(resource -> new SelectResource(resource.getId(), resource.getTitle(), false)).collect(Collectors.toList());
        }

        return all.stream().map(resource -> {
            if(part.contains(resource)){
                return new SelectResource(resource.getId(), resource.getTitle(), true);
            }
            return new SelectResource(resource.getId(), resource.getTitle(), false);
        }).collect(Collectors.toList());
    }


    /***
     * 角色具备的 _菜单_ 与 _所有菜单_ 进行合并，合并结果是所有的菜单中 角色具备的菜单checked=true
     *
     * @param all
     * @param part
     * @return
     */
    public List<SelectMenu> mergeMenus(List<Menu> all, List<Menu> part){
        if(CollectionUtils.isEmpty(all)){
            return null;
        }

        if(CollectionUtils.isEmpty(part)){
            return all.stream().map(menu -> new SelectMenu(menu.getId(), menu.getLabel(), false)).collect(Collectors.toList());
        }

        return all.stream().map(menu -> {
            if(part.contains(menu)){
                return new SelectMenu(menu.getId(), menu.getLabel(), true);
            }
            return new SelectMenu(menu.getId(), menu.getLabel(), false);
        }).collect(Collectors.toList());
    }
}
